home *** CD-ROM | disk | FTP | other *** search
/ Apple Developer Connection Student Program / ADC Tools Sampler CD Disk 3 1999.iso / Cool Demos, SDKs, & Tools / Demos⁄Tools⁄Offers / Eiffel for CW beta 3 / EiffelS2 / LIBRARY / MOTEL / Graphics.c < prev    next >
Text File  |  1999-05-09  |  15KB  |  707 lines

  1. /*------------------------------------------------------------------*/
  2. /* Eiffel/S II MacOS Runtime                                         */
  3. /*------------------------------------------------------------------*/
  4. /* Author    : Ian Joyner                                               */
  5. /* Release   : 1.0                                                  */
  6. /* Date      : Dec. 1997                                            */
  7. /* Copyright : Ian Joyner                                            */
  8. /*------------------------------------------------------------------*/
  9. /********************************************************************/
  10. /*                                                                    */
  11. /*                                QUICKDRAW                            */
  12. /*                                                                    */
  13. /********************************************************************/
  14.  
  15. #include <Quickdraw.h>
  16. #include <Sound.h>
  17. #include <Eiffel2.h>
  18.  
  19. POINTER platform_QD_GetPort ()
  20. {
  21.     GrafPtr p;
  22.     
  23.     GetPort (&p);
  24.     return (POINTER)p;
  25. }
  26.  
  27. void platform_QD_SetPort (POINTER p)
  28. {    
  29.     SetPort ((GrafPtr)p);
  30. }
  31.  
  32. POINTER platform_QD_white ()
  33. {
  34.     return (POINTER)&qd.white;
  35. }
  36.  
  37. POINTER platform_QD_black ()
  38. {
  39.     return (POINTER)&qd.black;
  40. }
  41.  
  42. POINTER platform_QD_gray ()
  43. {
  44.     return (POINTER)&qd.gray;
  45. }
  46.  
  47. POINTER platform_QD_light_gray ()
  48. {
  49.     return (POINTER)&qd.ltGray;
  50. }
  51.  
  52. POINTER platform_QD_dark_gray ()
  53. {
  54.     return (POINTER)&qd.dkGray;
  55. }
  56.  
  57. POINTER platform_QD_arrow ()
  58. {
  59.     return (POINTER)&qd.arrow;
  60. }
  61.  
  62. POINTER platform_QD_screen_bits ()
  63. {
  64.     return (POINTER)&qd.screenBits;
  65. }
  66.  
  67. INTEGER platform_QD_random_seed ()
  68. {
  69.     return qd.randSeed;
  70. }
  71.  
  72. void platform_QD_set_random_seed (INTEGER start)
  73. {
  74.     qd.randSeed = start;
  75. }
  76.  
  77. INTEGER platform_QD_screen_left ()
  78. {
  79.     return qd.screenBits.bounds.left;
  80. }
  81.  
  82. INTEGER platform_QD_screen_top ()
  83. {
  84.     return qd.screenBits.bounds.top;
  85. }
  86.  
  87. INTEGER platform_QD_screen_right ()
  88. {
  89.     return qd.screenBits.bounds.right;
  90. }
  91.  
  92. INTEGER platform_QD_screen_bottom ()
  93. {
  94.     return qd.screenBits.bounds.bottom;
  95. }
  96.  
  97. void platform_QD_move_to (INTEGER h, INTEGER v)
  98. {
  99.     MoveTo (h, v);
  100. }
  101.  
  102. void platform_QD_move (INTEGER dh, INTEGER dv)
  103. {
  104.     Move (dh, dv);
  105. }
  106.  
  107. void platform_QD_line_to (INTEGER h, INTEGER v)
  108. {
  109.     LineTo (h, v);
  110. }
  111.  
  112. void platform_QD_line (INTEGER dh, INTEGER dv)
  113. {
  114.     Line (dh, dv);
  115. }
  116.  
  117. void platform_QD_color_bit (INTEGER which_bit)
  118. {
  119.     ColorBit (which_bit);
  120. }
  121.  
  122. INTEGER platform_desktop_rectangle_left ()
  123. {
  124.     return (*GetGrayRgn ())->rgnBBox.left;
  125. }
  126.  
  127. INTEGER platform_desktop_rectangle_top ()
  128. {
  129.     return (*GetGrayRgn ())->rgnBBox.top;
  130. }
  131.  
  132. INTEGER platform_desktop_rectangle_right ()
  133. {
  134.     return (*GetGrayRgn ())->rgnBBox.right;
  135. }
  136.  
  137. INTEGER platform_desktop_rectangle_bottom ()
  138. {
  139.     return (*GetGrayRgn ())->rgnBBox.bottom;
  140. }
  141.  
  142. void platform_point_global_to_local (INTEGER *x, INTEGER *y)
  143. {
  144.     Point p;
  145.     
  146.     SetPt (&p, *x, *y);
  147.     GlobalToLocal (&p);
  148.     
  149.     *x = p.h;
  150.     *y = p.v;
  151. }
  152.  
  153. void platform_point_local_to_global (INTEGER *x, INTEGER *y)
  154. {
  155.     Point p;
  156.     
  157.     SetPt (&p, *x, *y);
  158.     LocalToGlobal (&p);
  159.     
  160.     *x = p.h;
  161.     *y = p.v;
  162. }
  163.  
  164. BOOLEAN platform_QD_done ()
  165. {
  166.     return QDDone (NULL);
  167. }
  168.  
  169. /********************************************************************/
  170. /*                                                                    */
  171. /*                            QUICKDRAW text                            */
  172. /*                                                                    */
  173. /********************************************************************/
  174.  
  175. /*void platform_QD_text_font (INTEGER the_font)
  176. {
  177.     TextFont (the_font);
  178. }
  179.  
  180. void platform_QD_text_face (INTEGER the_face)
  181. {
  182.     TextFace (the_face);
  183. }
  184.  
  185. void platform_QD_text_mode (INTEGER the_mode)
  186. {
  187.     TextMode (the_mode);
  188. }
  189.  
  190. void platform_QD_text_size (INTEGER new_size)
  191. {
  192.     TextSize (new_size);
  193. }*/
  194.  
  195. /********************************************************************/
  196. /*                                                                    */
  197. /*                                PEN                                    */
  198. /*                                                                    */
  199. /********************************************************************/
  200.  
  201. void platform_get_pen (INTEGER *x, INTEGER *y)
  202. {
  203.     Point p;
  204.     
  205.     GetPen (&p);
  206.     
  207.     *x = p.h;
  208.     *y = p.v;
  209. }
  210.  
  211. void platform_set_pen_size (INTEGER width, INTEGER height)
  212. {
  213.     PenSize (width, height);
  214. }
  215.  
  216. void platform_set_pen_mode (INTEGER mode)
  217. {
  218.     PenMode (mode);
  219. }
  220.  
  221. /********************************************************************/
  222. /*                                                                    */
  223. /*                                PORTs                                */
  224. /*                                                                    */
  225. /********************************************************************/
  226.  
  227. INTEGER platform_graf_port_size ()
  228. {
  229.     CGrafPort p;
  230.     
  231.     return (sizeof (p));
  232. }
  233.  
  234. void platform_SetPort (GrafPtr port)
  235. {
  236.     SetPort (port);
  237. }
  238.  
  239. INTEGER platform_port_left (GrafPtr gp)
  240. {
  241.     return gp->portRect.left;
  242. }
  243.  
  244. INTEGER platform_port_top (GrafPtr gp)
  245. {
  246.     return gp->portRect.top;
  247. }
  248.  
  249. INTEGER platform_port_right (GrafPtr gp)
  250. {
  251.     return gp->portRect.right;
  252. }
  253.  
  254. INTEGER platform_port_bottom (GrafPtr gp)
  255. {
  256.     return gp->portRect.bottom;
  257. }
  258.  
  259. void platform_port_invalidate (INTEGER l, INTEGER t, INTEGER r, INTEGER b)
  260. {
  261.     Point lt, rb;
  262.     Rect rc;
  263.     
  264.     SetRect (&rc, l, t, r, b);
  265.     
  266.     InvalRect (&rc);
  267. }
  268.  
  269. void platform_port_set_origin (INTEGER h, INTEGER v)
  270. {
  271.     SetOrigin (h, v);
  272. }
  273.  
  274. void platform_port_scroll (INTEGER l, INTEGER t, INTEGER r, INTEGER b, INTEGER dh, INTEGER dv, RgnHandle update_region)
  275. {
  276.     Rect rc;
  277.     
  278.     SetRect (&rc, l, t, r, b);
  279.     
  280.     ScrollRect (&rc, dh, dv, update_region);
  281. }
  282.  
  283. void platform_port_set_size (INTEGER width, INTEGER height)
  284. {
  285.     PortSize (width, height);
  286. }
  287.  
  288. void platform_port_move_to (INTEGER l, INTEGER t)
  289. {
  290.     MovePortTo (l, t);
  291. }
  292.  
  293. BOOLEAN platform_port_pixel (INTEGER h, INTEGER v)
  294. {
  295.     return GetPixel (h, v);
  296. }
  297.  
  298. /********************************************************************/
  299. /*                                                                    */
  300. /*                            PATTERNs                                */
  301. /*                                                                    */
  302. /********************************************************************/
  303.  
  304. INTEGER platform_pattern_size ()
  305. {
  306.     Pattern p;
  307.     
  308.     return (sizeof (p));
  309. }
  310.  
  311. PatHandle platform_pattern_get (PatPtr p, INTEGER id)
  312. {
  313.     PatHandle ph;
  314.     
  315.     ph = GetPattern (id);
  316.     *p = **ph;
  317.     DisposeHandle ((Handle) ph);
  318. }
  319.  
  320. PatHandle platform_pattern_get_from_list (PatPtr p, INTEGER list_id, INTEGER index)
  321. {
  322.     GetIndPattern (p, list_id, index);
  323. }
  324.  
  325. /********************************************************************/
  326. /*                                                                    */
  327. /*                                BIT MAPs                            */
  328. /*                                                                    */
  329. /********************************************************************/
  330.  
  331. INTEGER platform_bit_map_size ()
  332. {
  333.     BitMap bm;
  334.     
  335.     return (sizeof (bm));
  336. }
  337.  
  338. void platform_bit_map_attach (BitMap *pbm, POINTER p_map)
  339. {
  340.     pbm->baseAddr = p_map;
  341. }
  342.  
  343. /********************************************************************/
  344. /*                                                                    */
  345. /*                             SHAPESs                                */
  346. /*                                                                    */
  347. /********************************************************************/
  348.  
  349. BOOLEAN shape_open;
  350.  
  351. BOOLEAN platform_no_shape_open ()
  352. {
  353.     return (!shape_open);
  354. }
  355.  
  356. #define QD_call(n, c)\
  357. void n (INTEGER left, INTEGER top, INTEGER right, INTEGER bottom)\
  358. {\
  359.     Rect r;\
  360. \
  361.     SetRect (&r, left, top, right, bottom);\
  362.     c (&r);\
  363. }
  364.  
  365. #define QD_call_fill(n, c)\
  366. void n (INTEGER left, INTEGER top, INTEGER right, INTEGER bottom, const Pattern *p)\
  367. {\
  368.     Rect r;\
  369. \
  370.     SetRect (&r, left, top, right, bottom);\
  371.     c (&r, p);\
  372. }
  373.  
  374. #define QD_callRRArc(n, c)\
  375. void n (INTEGER left, INTEGER top, INTEGER right, INTEGER bottom,INTEGER  w, INTEGER h)\
  376. {\
  377.     Rect r;\
  378. \
  379.     SetRect (&r, left, top, right, bottom);\
  380.     c (&r, w, h);\
  381. }
  382.  
  383. #define QD_call_fillRRArc(n, c)\
  384. void n (INTEGER left, INTEGER top, INTEGER right,INTEGER  bottom, INTEGER w, INTEGER h, const Pattern *p)\
  385. {\
  386.     Rect r;\
  387. \
  388.     SetRect (&r, left, top, right, bottom);\
  389.     c (&r, w, h, p);\
  390. }
  391.  
  392. #define QD_callT(n, c, t)\
  393. void n (t rp)\
  394. {\
  395.     c (rp);\
  396. }
  397.  
  398. #define QD_call_fillT(n, c, t)\
  399. void n (t rp, const Pattern *p)\
  400. {\
  401.     c (rp, p);\
  402. }
  403.  
  404. /********************************************************************/
  405. /*                                                                    */
  406. /*                            LINEs                                    */
  407. /*                                                                    */
  408. /********************************************************************/
  409.  
  410. void platform_line_frame (INTEGER h1, INTEGER v1, INTEGER h2, INTEGER v2)
  411. {
  412.     MoveTo (h1, v1);
  413.     LineTo (h2, v2);
  414. }
  415.  
  416. /********************************************************************/
  417. /*                                                                    */
  418. /*                            RECTANGLEs                                */
  419. /*                                                                    */
  420. /********************************************************************/
  421.  
  422. QD_call (platform_rectangle_frame, FrameRect)
  423. QD_call (platform_rectangle_paint, PaintRect)
  424. QD_call_fill (platform_rectangle_fill, FillRect)
  425. QD_call (platform_rectangle_erase, EraseRect)
  426. QD_call (platform_rectangle_invert, InvertRect)
  427. QD_call (platform_rectangle_invalidate, InvalRect)
  428. QD_call (platform_rectangle_validate, ValidRect)
  429. QD_call (platform_rectangle_set_clip, ClipRect)
  430.  
  431. void platform_rectangle_scroll (INTEGER left, INTEGER top, INTEGER right, INTEGER bottom, INTEGER dh, INTEGER dv, RgnHandle ur)
  432. {
  433.     Rect r;
  434.  
  435.     SetRect (&r, left, top, right, bottom);
  436.     
  437.     ScrollRect (&r, dh, dv, ur);
  438. }
  439.  
  440. /********************************************************************/
  441. /*                                                                    */
  442. /*                                ELLIPSEs                            */
  443. /*                                                                    */
  444. /********************************************************************/
  445.  
  446. QD_call (platform_ellipse_frame, FrameOval)
  447. QD_call (platform_ellipse_paint, PaintOval)
  448. QD_call_fill (platform_ellipse_fill, FillOval)
  449. QD_call (platform_ellipse_erase, EraseOval)
  450. QD_call (platform_ellipse_invert, InvertOval)
  451.  
  452. /********************************************************************/
  453. /*                                                                    */
  454. /*                        ROUND RECTANGLEs                            */
  455. /*                                                                    */
  456. /********************************************************************/
  457.  
  458. QD_callRRArc (platform_round_rectangle_frame, FrameRoundRect)
  459. QD_callRRArc (platform_round_rectangle_paint, PaintRoundRect)
  460. QD_call_fillRRArc (platform_round_rectangle_fill, FillRoundRect)
  461. QD_callRRArc (platform_round_rectangle_erase, EraseRoundRect)
  462. QD_callRRArc (platform_round_rectangle_invert, InvertRoundRect)
  463.  
  464. /********************************************************************/
  465. /*                                                                    */
  466. /*                                ARCs                                */
  467. /*                                                                    */
  468. /********************************************************************/
  469.  
  470. QD_callRRArc (platform_arc_frame, FrameArc)
  471. QD_callRRArc (platform_arc_paint, PaintArc)
  472. QD_call_fillRRArc (platform_arc_fill, FillArc)
  473. QD_callRRArc (platform_arc_erase, EraseArc)
  474. QD_callRRArc (platform_arc_invert, InvertArc)
  475.  
  476. /********************************************************************/
  477. /*                                                                    */
  478. /*                                REGIONs                                */
  479. /*                                                                    */
  480. /********************************************************************/
  481.  
  482. BOOLEAN region_is_open;
  483.  
  484. BOOLEAN platform_region_is_open ()
  485. {
  486.     return (region_is_open);
  487. }
  488.  
  489. int platform_region_size ()
  490. {
  491.     Region r;
  492.     
  493.     return (sizeof (r));
  494. }
  495.  
  496. POINTER platform_region_new ()
  497. {
  498.     return (POINTER) NewRgn ();
  499. }
  500.  
  501. POINTER platform_region_open ()
  502. {
  503.     OpenRgn ();
  504.     shape_open = true;
  505.     region_is_open = true;
  506.     return (POINTER) NewRgn ();
  507. }
  508.  
  509. void platform_region_copy (RgnHandle src, RgnHandle dst)
  510. {
  511.     CopyRgn (src, dst);
  512. }
  513.  
  514. /* These aren't needed... no 32 to 16 bit conversions...
  515. QD_callT (platform_region_frame, FrameRgn, RgnHandle)
  516. QD_callT (platform_region_paint, PaintRgn, RgnHandle)
  517. QD_call_fillT (platform_region_fill, FillRgn, RgnHandle)
  518. QD_callT (platform_region_erase, EraseRgn, RgnHandle)
  519. QD_callT (platform_region_invert, InvertRgn, RgnHandle)
  520. QD_callT (platform_region_invalidate, InvalRgn, RgnHandle)
  521. QD_callT (platform_region_validate, ValidRgn, RgnHandle) */
  522.  
  523. void platform_region_offset (RgnHandle r, INTEGER dh, INTEGER dv)
  524. {
  525.     OffsetRgn (r, dh, dv);
  526. }
  527.  
  528. void platform_region_close (RgnHandle r)
  529. {
  530.     shape_open = false;
  531.     region_is_open = false;
  532.     
  533.     CloseRgn (r);
  534. }
  535.  
  536. /********************************************************************/
  537. /*                                                                    */
  538. /*                                POLYGONs                            */
  539. /*                                                                    */
  540. /********************************************************************/
  541.  
  542. POINTER platform_polygon_open ()
  543. {
  544.     shape_open = true;
  545.     
  546.     return ((POINTER) OpenPoly ());
  547. }
  548.  
  549. /* These aren't needed... no 32 to 16 bit conversions...
  550. QD_callT (platform_frame_polygon, FramePolygon, PolyHandle)
  551. QD_callT (platform_paint_polygon, PaintPolygon, PolyHandle)
  552. QD_call_fillT (platform_fill_polygon, FillPolygon, PolyHandle)
  553. QD_callT (platform_erase_polygon, ErasePolygon, PolyHandle)
  554. QD_callT (platform_invert_polygon, InvertPolygon, PolyHandle) */
  555.  
  556. void platform_polygon_offset (PolyHandle p, INTEGER dh, INTEGER dv)
  557. {
  558.     OffsetPoly (p, dh, dv);
  559. }
  560.  
  561. void platform_polygon_close (POINTER p)  /* parameter ignored */
  562. {
  563.     shape_open = false;
  564.     
  565.     ClosePoly ();
  566. }
  567.  
  568. /********************************************************************/
  569. /*                                                                    */
  570. /*                                PICTUREs                            */
  571. /*                                                                    */
  572. /********************************************************************/
  573.  
  574. PicHandle platform_picture_open (INTEGER left, INTEGER top, INTEGER right, INTEGER bottom, REAL h_res, REAL v_res)
  575. {
  576.     OpenCPicParams pp;
  577.     
  578.     SetRect (&pp.srcRect, left, top, right, bottom);
  579.     pp.hRes = h_res;
  580.     pp.vRes = v_res;
  581.     pp.version = -2;
  582.     pp.reserved1 = 0;
  583.     pp.reserved2 = 0;
  584.         
  585.     shape_open = true;
  586.     
  587.     return OpenCPicture (&pp);
  588. }
  589.  
  590. PicHandle platform_picture_get (INTEGER id)
  591. {
  592.     return GetPicture (id);
  593. }
  594.  
  595. void platform_picture_comment (INTEGER kind, INTEGER sz, Handle d)
  596. {
  597.     PicComment (kind, sz, d);
  598. }
  599.  
  600. void platform_picture_draw (PicHandle p, INTEGER left, INTEGER top, INTEGER right, INTEGER bottom)
  601. {
  602.     Rect bounds_rect;
  603.     
  604.     SetRect (&bounds_rect, left, top, right, bottom);
  605.     
  606.     DrawPicture (p, &bounds_rect);
  607. }
  608.  
  609. void platform_picture_close (POINTER p)  /* parameter ignored */
  610. {
  611.     shape_open = false;
  612.     
  613.     ClosePicture ();
  614. }
  615.  
  616. /********************************************************************/
  617. /*                                                                    */
  618. /*                                COLORs                                */
  619. /*                                                                    */
  620. /********************************************************************/
  621.  
  622. void platform_invert_color (INTEGER *rp, INTEGER *gp, INTEGER *bp)
  623. {
  624.     RGBColor c;
  625.     
  626.     c.red = *rp;
  627.     c.green = *gp;
  628.     c.blue = *bp;
  629.     
  630.     InvertColor (&c);
  631.     
  632.     *rp = c.red;
  633.     *gp = c.green;
  634.     *bp = c.blue;
  635. }
  636.  
  637. void platform_set_fore_color (INTEGER r, INTEGER g, INTEGER b)
  638. {
  639.     RGBColor c;
  640.     
  641.     c.red = r;
  642.     c.green = g;
  643.     c.blue = b;
  644.     
  645.     RGBForeColor (&c);
  646. }
  647.  
  648. void platform_set_back_color (INTEGER r, INTEGER g, INTEGER b)
  649. {
  650.     RGBColor c;
  651.     
  652.     c.red = r;
  653.     c.green = g;
  654.     c.blue = b;
  655.     
  656.     RGBBackColor (&c);
  657. }
  658.  
  659. void platform_get_fore_color (INTEGER *rp, INTEGER *gp, INTEGER *bp)
  660. {
  661.     RGBColor c;
  662.     
  663.     GetForeColor (&c);
  664.     
  665.     *rp = c.red;
  666.     *gp = c.green;
  667.     *bp = c.blue;
  668. }
  669.  
  670. void platform_get_back_color (INTEGER *rp, INTEGER *gp, INTEGER *bp)
  671. {
  672.     RGBColor c;
  673.     
  674.     GetBackColor (&c);
  675.     
  676.     *rp = c.red;
  677.     *gp = c.green;
  678.     *bp = c.blue;
  679. }
  680.  
  681. /********************************************************************/
  682. /*                                                                    */
  683. /*                                STRINGs                                */
  684. /*                                                                    */
  685. /********************************************************************/
  686.  
  687. void platform_draw_string (POINTER str)
  688. {
  689.     Str255 scratch;
  690.     
  691.     strcpy (scratch, str);
  692.     c2pstr ((char *)scratch); /* This might not be right if string is loaded from a resource */
  693.  
  694.     DrawString (scratch);
  695. }
  696.  
  697. INTEGER platform_string_width (POINTER str)
  698. {
  699.     Str255 scratch;
  700.     
  701.     strcpy (scratch, str);
  702.     c2pstr ((char *)scratch); /* This might not be right if string is loaded from a resource */
  703.     
  704.     return (StringWidth (scratch));
  705. }
  706.  
  707.